package d4_sf;

import java.util.Arrays;

public class Demo02_2 {
    public static void main(String[] args) {
        //目标: 实现选择排序(进行改进,减少交换的次数,以提高性能)
        //1、定义一个数组
        int[] arr = {5, 1, 3, 2};


        //2、定义一个循环控制选择的几轮
        for (int i = 0; i < arr.length - 1; i++) {
            //开始推理(一定要写占位,人的思维是平面的,很难想到)
            //轮数(i)    每轮的次数        j的占位
            // 0            3           1 2 3
            // 1            2           2 3
            // 2            1           3

            //思想就是用一个min变量记住最小值的索引,最后在进行交换即可,这样子就可以达到只交换一次的目的
            int min = i;//假设第一个就是这一轮的最小值
            //3、内部循环要控制选择几次
            for (int j = i + 1; j < arr.length; j++) {//j不许等于i+1,----->不能写1,内循环会结束,结束之后,j重置,达不到排序的目的
                //4、判断出最小值,并交换索引
                if (arr[j] < arr[min]) {
                    //5、进行如果j出的值比min出的值小,就进行交换
                    min = j;
                }
            }
            //6、最后将min索引处的值与i处的值进行交换
            //进行判断后面是有最小值
            if (min != i){
                //临时变量
                int temp = arr[i];
                arr[i] = arr[min];
                arr[min] = temp;
            }
        }
        System.out.println(Arrays.toString(arr));

    }
}
